/**
 * <br>项目名: ThreadTest
 * <br>文件名: CyclicBarrierTest.java
 * <br>Copyright 2018   国信嘉宁数据技术有限公司
 */
package src;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/**
 * <br>
 * 类 名: CyclicBarrierTest <br>
 * 描 述: 描述类完成的主要功能 <br>
 * 作 者: zhaowei <br>
 * 创 建: 2018年6月5日 <br>
 * 版 本: v1.0.0 <br>
 * <br>
 * 历 史: (版本) 作者 时间 注释
 */
public class CyclicBarrierTest {

	/**
	 * <br>
	 * 描 述: <br>
	 * 作 者: zhaowei <br>
	 * 历 史: (版本) 作者 时间 注释
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		 int num = 3;  
         CyclicBarrier barrier = new CyclicBarrier(num,new Leader());  
         for (int i = 0; i <num; i++) {  
             new Thread(new Employee(barrier)).start();  
         }  
	}

}

class Leader implements Runnable{  
    @Override  
    public void run() {  
        System.out.println("吃饭前我先说几句");  
        try {  
            Thread.sleep(5000);//说了半个小时  比如吧  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        }  
    }  
}

class Employee implements Runnable {
	private CyclicBarrier barrier;
	public Employee(final CyclicBarrier barrier) {
		this.barrier = barrier;
	}

	public void run() {
		try {
			Thread.sleep(3000);
			System.out.println("都在等领导说完话准备吃");  
			barrier.await(); // 等待最后一个线程到达（底层会去判断）
		} catch (InterruptedException | BrokenBarrierException e) {
			e.printStackTrace();
		}
		 System.out.println("说了30分钟准备用筷子开始吃了");  
	}
}
